home *** CD-ROM | disk | FTP | other *** search
- /***************************** control.c ******************************/
- #include "sdi.h"
- #include <sunwindow/notify.h>
-
- /*
- * Copyright 1987 by Mark Weiser.
- * Permission to reproduce and use in any manner whatsoever on Suns is granted
- * so long as this copyright and other identifying marks of authorship
- * in the code and the game remain intact and visible. Use of this code
- * in other products is reserved to me--I'm working on Mac and IBM versions.
- */
-
- /*
- * The main code for setting up the control panel lives here.
- * Other panel-related code is in control_procs.c, helpers.c, and main.c.
- */
-
- static short i_pic_array[] = {
- #include "interceptor_picture.h"
- };
- mpr_static(interceptor_pic, 16, 16, 1, i_pic_array);
-
- static short l_pic_array[] = {
- #include "laser_picture.h"
- };
- mpr_static(laser_pic, 16, 16, 1, l_pic_array);
-
- static short r_pic_array[] = {
- #include "rock_picture.h"
- };
- mpr_static(rock_pic, 16, 16, 1, r_pic_array);
-
- static short f_pic_array[] = {
- #include "foe_picture.h"
- };
- mpr_static(foe_pic, 16, 16, 1, f_pic_array);
-
- static short c1_pic_array[] = {
- #include "cursor.h"
- };
- mpr_static(normal_pic, 16, 16, 1, c1_pic_array);
-
- static short c2_pic_array[] = {
- #include "dyna_picture.h"
- };
- mpr_static(dyna_pic, 16, 16, 1, c2_pic_array);
-
- static short c3_pic_array[] = {
- #include "cross_picture.h"
- };
- mpr_static(cross_pic, 16, 16, 1, c3_pic_array);
-
- static short c4_pic_array[] = {
- #include "silly_picture.h"
- };
- mpr_static(silly_pic, 16, 16, 1, c4_pic_array);
-
- extern void next_round_proc(), quit_proc(), master_proc(), no_events(),
- suspend_proc(), resume_proc(), open_proc(), scores_proc(), end_proc(),
- help_proc(), about_proc(), higher_proc(), cycle_time_proc(),
- save_proc(), restore_proc(), text_options_proc(), instructions_proc(),
- cursor_notify_proc(), icon_option_proc(), misc_options_proc(),
- ballistic_time_proc(), new_game_proc(), non_stop_notify_proc(),
- version_proc();
- extern Panel_setting save_file_notify_proc(), name_notify_proc();
-
- Panel_item cycle_time_item, timeout_item;
-
- /*
- * Build and place all the items in the control panel.
- */
- init_control(panel)
- Panel panel;
- {
- extern Panel_item rock_item;
- extern int gamemaster, continuous, time_to_play, starting_skill;
- extern struct pixfont *bigfont, *buttonfont; /* use 'struct pixfont', not 'Pixfont',
- for 3.0 compatibility */
- if ((bigfont = (struct pixfont *)pf_open(
- "/usr/lib/fonts/fixedwidthfonts/screen.b.14")) == NULL) {
- bigfont = (struct pixfont *)pf_default();
- }
- if ((buttonfont = (struct pixfont *)pf_open(
- "/usr/lib/fonts/fixedwidthfonts/screen.r.12")) == NULL) {
- buttonfont = (struct pixfont *)pf_default();
- }
- next_round_item = panel_create_item(panel, PANEL_BUTTON,
- PANEL_LABEL_IMAGE, panel_button_image(panel, "Next Round", 12, buttonfont),
- PANEL_NOTIFY_PROC, next_round_proc,
- PANEL_SHOW_ITEM, FALSE,
- 0);
- (void) panel_create_item(panel, PANEL_BUTTON,
- PANEL_LABEL_IMAGE, panel_button_image(panel, "Quit", 6, buttonfont),
- PANEL_NOTIFY_PROC, quit_proc,
- 0);
- (void) panel_create_item(panel, PANEL_BUTTON,
- PANEL_LABEL_IMAGE, panel_button_image(panel, "New Game", 10, buttonfont),
- PANEL_NOTIFY_PROC, new_game_proc,
- 0);
- suspend_item = panel_create_item(panel, PANEL_BUTTON,
- PANEL_LABEL_IMAGE, panel_button_image(panel, "Suspend", 9, buttonfont),
- PANEL_NOTIFY_PROC, suspend_proc,
- 0);
- resume_item = panel_create_item(panel, PANEL_BUTTON,
- PANEL_LABEL_IMAGE, panel_button_image(panel, "Resume", 9, buttonfont),
- PANEL_NOTIFY_PROC, resume_proc,
- PANEL_SHOW_ITEM, FALSE,
- PANEL_ITEM_X, panel_get(suspend_item, PANEL_ITEM_X),
- PANEL_ITEM_Y, panel_get(suspend_item ,PANEL_ITEM_Y),
- 0);
- level_item = panel_create_item(panel, PANEL_TEXT,
- PANEL_LABEL_STRING, "Level:",
- PANEL_VALUE, "0",
- (char *)PANEL_EVENT_PROC, (char *)no_events,
- PANEL_VALUE_DISPLAY_LENGTH, 2,
- 0);
- score_item = panel_create_item(panel, PANEL_TEXT,
- PANEL_LABEL_STRING, "Score:",
- PANEL_VALUE, "0",
- PANEL_VALUE_DISPLAY_LENGTH, 8,
- (char *)PANEL_EVENT_PROC, (char *)no_events,
- PANEL_VALUE_FONT, bigfont,
- 0);
- interceptor_item = panel_create_item(panel, PANEL_SLIDER,
- ATTR_LIST, panel_common,
- #ifdef STRINGLABELS
- PANEL_LABEL_STRING, "Interceptors: ",
- #else
- PANEL_LABEL_IMAGE, &interceptor_pic,
- #endif
- 0);
- rock_item = panel_create_item(panel, PANEL_SLIDER,
- ATTR_LIST, panel_common,
- #ifdef STRINGLABELS
- PANEL_LABEL_STRING, "Rocks: ",
- #else
- PANEL_LABEL_IMAGE, &rock_pic,
- #endif
- 0);
- laser_item = panel_create_item(panel, PANEL_SLIDER,
- ATTR_LIST, panel_common,
- #ifdef STRINGLABELS
- PANEL_LABEL_STRING, "X-ray lasers: ",
- #else
- PANEL_LABEL_IMAGE, &laser_pic,
- #endif
- 0);
- #define FOE_WIDTH 270
- foe_item = panel_create_item(panel, PANEL_SLIDER,
- ATTR_LIST, panel_common,
- #ifdef STRINGLABELS
- PANEL_LABEL_STRING, "Foe in flight:",
- #else
- PANEL_LABEL_IMAGE, &foe_pic,
- #endif
- PANEL_SLIDER_WIDTH, FOE_WIDTH,
- 0);
- total_foe_item = panel_create_item(panel, PANEL_TEXT,
- PANEL_LABEL_STRING, "Total foe killed:",
- PANEL_VALUE, "0",
- PANEL_VALUE_DISPLAY_LENGTH, 24,
- (char *)PANEL_EVENT_PROC, (char *)no_events,
- 0);
- if (time_to_play) {
- timeout_item = panel_create_item(panel, PANEL_SLIDER,
- ATTR_LIST, panel_common,
- PANEL_LABEL_STRING, "Seconds remaining:",
- PANEL_MIN_VALUE, 0, PANEL_MAX_VALUE, time_to_play,
- PANEL_VALUE, time_to_play,
- PANEL_SLIDER_WIDTH, 500,
- 0);
- continuous = 1;
- start_timeout(timeout_item);
- }
- (void) panel_create_item(panel, PANEL_BUTTON,
- PANEL_LABEL_IMAGE, panel_button_image(panel, "Options", 9, buttonfont),
- PANEL_NOTIFY_PROC, misc_options_proc,
- 0);
- (void) panel_create_item(panel, PANEL_BUTTON,
- PANEL_LABEL_IMAGE, panel_button_image(panel, "Things to Read", 16, buttonfont),
- PANEL_NOTIFY_PROC, text_options_proc,
- 0);
- (void) panel_create_item(panel, PANEL_BUTTON,
- PANEL_LABEL_IMAGE, panel_button_image(panel, "Icon Options", 14, buttonfont),
- PANEL_NOTIFY_PROC, icon_option_proc,
- 0);
- skill_item = panel_create_item(panel, PANEL_CYCLE,
- PANEL_LABEL_STRING, " Skill:",
- PANEL_CHOICE_STRINGS, "Novice", "Occasional", "Expert", 0,
- PANEL_NOTIFY_PROC, new_game_proc,
- PANEL_VALUE, starting_skill,
- 0);
- (void) panel_create_item(panel, PANEL_BUTTON,
- PANEL_LABEL_IMAGE, panel_button_image(panel, "Instructions", 14, buttonfont),
- PANEL_NOTIFY_PROC, instructions_proc,
- 0);
- if (gamemaster) {
- (void) panel_create_item(panel, PANEL_TOGGLE,
- PANEL_CHOICE_STRINGS, "Gamemaster", 0,
- PANEL_NOTIFY_PROC, master_proc,
- PANEL_SHOW_ITEM, TRUE,
- 0);
- }
- }
-
- void
- misc_options_proc()
- {
- extern int cursor_type, ballistic_delay;
- extern struct pixfont *buttonfont; /* use 'struct pixfont' for 3.0 compatiblity */
- char *s;
- Panel panel, make_popup_panel();
- void options_done();
- if ((panel = make_popup_panel(" SDI Options", options_done)) == NULL) {
- return;
- }
-
- (void) panel_create_item(panel, PANEL_CYCLE,
- PANEL_LABEL_STRING, "Cursor:",
- PANEL_CHOICE_IMAGES, &normal_pic, &dyna_pic, &cross_pic, &silly_pic, 0,
- PANEL_MENU_CHOICE_STRINGS, "normal", "dynamic", "crosshair", "silly", 0,
- PANEL_NOTIFY_PROC, cursor_notify_proc,
- PANEL_VALUE, cursor_type,
- 0);
- (void) panel_create_item(panel, PANEL_TOGGLE,
- PANEL_CHOICE_STRINGS, "Non-stop", 0,
- PANEL_NOTIFY_PROC, non_stop_notify_proc,
- PANEL_VALUE, continuous,
- 0);
- (void) panel_create_item(panel, PANEL_BUTTON,
- PANEL_LABEL_IMAGE, panel_button_image(panel, "Melt", 4, buttonfont),
- PANEL_NOTIFY_PROC, end_proc,
- 0);
- if (user_name[0] == '\0') {
- s = (char *)get_name();
- if (s[0] != '\0') strcpy(user_name, s);
- }
- user_name_item = panel_create_item(panel, PANEL_TEXT,
- PANEL_LABEL_STRING, "Name: ",
- PANEL_VALUE_DISPLAY_LENGTH, 16,
- PANEL_VALUE_STORED_LENGTH, 63,
- PANEL_VALUE, user_name,
- 0);
- panel_fit_width(panel);
- (void) panel_create_item(panel, PANEL_BUTTON,
- PANEL_LABEL_IMAGE, panel_button_image(panel, "Save", 6, buttonfont),
- PANEL_NOTIFY_PROC, save_proc,
- 0);
- (void) panel_create_item(panel, PANEL_BUTTON,
- PANEL_LABEL_IMAGE, panel_button_image(panel, "Restore", 7, buttonfont),
- PANEL_NOTIFY_PROC, restore_proc,
- 0);
- save_file_item = panel_create_item(panel, PANEL_TEXT,
- PANEL_LABEL_STRING, "Save file:",
- PANEL_VALUE_DISPLAY_LENGTH, 16,
- PANEL_VALUE_STORED_LENGTH, 63,
- PANEL_VALUE, save_file_name,
- 0);
- (void) panel_create_item(panel, PANEL_SLIDER,
- PANEL_LABEL_STRING, "Cycle time (ms): ",
- PANEL_NOTIFY_LEVEL, PANEL_ALL,
- PANEL_SLIDER_WIDTH, 100,
- PANEL_MIN_VALUE, 50,
- PANEL_MAX_VALUE, 250,
- PANEL_SHOW_RANGE, FALSE,
- PANEL_SHOW_VALUE, TRUE,
- PANEL_VALUE, blast_delay/1000,
- PANEL_SHOW_ITEM, TRUE,
- PANEL_NOTIFY_PROC, cycle_time_proc,
- 0);
- (void) panel_create_item(panel, PANEL_SLIDER,
- PANEL_LABEL_STRING, "Ballistic time: ",
- PANEL_SLIDER_WIDTH, 50,
- PANEL_MIN_VALUE, 0,
- PANEL_MAX_VALUE, 10,
- PANEL_SHOW_RANGE, FALSE,
- PANEL_SHOW_VALUE, TRUE,
- PANEL_VALUE, ballistic_delay,
- PANEL_SHOW_ITEM, TRUE,
- PANEL_NOTIFY_PROC, ballistic_time_proc,
- 0);
- user_name[0] = '\0';
- save_file_name[0] = '\0';
- display_popup_panel(panel);
- }
-
- void
- options_done()
- {
- strcpy(user_name, panel_get_value(user_name_item));
- strcpy(save_file_name, panel_get_value(save_file_item));
- }
-